/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.manager.consultar;

import br.com.deployment.entidade.registroimovel.Folha;
import br.com.deployment.entidade.registroimovel.Livro;
import br.com.deployment.message.Msg;
import br.com.deployment.servico.LivroServico;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author elyjr
 */
@ManagedBean
@SessionScoped
public class ManagerConsultarLivro implements Serializable{

    @EJB
    LivroServico livroServico;
    
    private Livro livro, livroIntervalo;
    private Folha folha;
    private List<Livro> lstLivros, lstLivroIntervalo;
    private List<Folha> lstFolhas, folhas;
    private Integer num1, num2;
    private Integer pag;
    private Folha folhaIntervalo;

    @PostConstruct
    public void init() {
        livro = new Livro();
        folha = new Folha();
        livroIntervalo = new Livro();
        num1 = new Integer(1);
        num2 = new Integer(1);

        //livroIntervalo.setFolhas(lstFolhas);
        lstLivroIntervalo = new ArrayList<Livro>();
        lstFolhas = new ArrayList<Folha>();
        folhas = new ArrayList<Folha>();
        folhaIntervalo = new Folha();

    }

    public List<Livro> completeLivro(String query) {
        List<Livro> suggestions = new ArrayList<Livro>();
        List<Livro> bd = new ArrayList<Livro>();

        Livro l = new Livro();
        l.setTitulo(query);
        bd = livroServico.findLivroTitulo(l);

        for (Livro p : bd) {
            suggestions.add(p);
        }
        return suggestions;
    }

    public List<Livro> completeLivroIntervalo(String query) {
        List<Livro> suggestions = new ArrayList<Livro>();
        List<Livro> bd = new ArrayList<Livro>();

        Livro l = new Livro();
        l.setTitulo(query);
        bd = livroServico.findLivroTitulo(l);

        for (Livro p : bd) {
            suggestions.add(p);
        }
        return suggestions;
    }

    public void handleSelect(SelectEvent event) {
        livro = (Livro) event.getObject();
        // livro = livroServico.find(Integer.valueOf((int) livro.getId().longValue()));

        System.out.println(livro);
    }

    public void handleSelectIntervalo(SelectEvent event) {
        livroIntervalo = (Livro) event.getObject();
        // livro = livroServico.find(Integer.valueOf((int) livro.getId().longValue()));

        System.out.println(livro);
    }

    public Long qtdFolha(Livro livro) {
        return livroServico.qtdFolhaLivro(livro);
    }

    public Integer menorNumero() {
        return livroServico.MenorNumero(this.livroIntervalo);
    }

    public void buscar() {

        this.livro.setNumero(pag == null ? 0 : pag);
        lstLivros = livroServico.Livros(livro, this.folha);
        System.err.println("Numero - " + this.getPag());

        for (Livro l : lstLivros) {
            folhas = livroServico.findFolhas(l, this.folha);
            l.setFolhas(folhas);
        }

    }

    public void buscarIntervalo() {

        System.err.println("Numero 2 - " + num2);
        if(num1 > num2){
            this.livroIntervalo = null; 
            Msg.messagemWarn("O numero pagIni não pode ser superior à PagFim");
             
        }
        if (num2 > qtdFolha(livroIntervalo)) {
            this.livroIntervalo = null;
            Msg.messagemWarn(" Qtd de folhas não existe no Livro ");
            
        } else {
            this.folhaIntervalo.setNumero(num1 == null ? 0 : num1);
            this.folhaIntervalo.setNumero(num2 == null ? 0 : num2);
            this.lstLivroIntervalo = livroServico.LivrosIntervalo(livroIntervalo, folhaIntervalo, num1 == null ? 0 : num1, num2 == null ? 0 : num2);
            for (Livro l : lstLivroIntervalo) {
                lstFolhas = livroServico.findFolhasIntervalo(l, num1 == null ? 0 : num1, num2 == null ? 0 : num2);
                l.setFolhas(lstFolhas);
                System.out.println(l.getFolhas());
            }
        }
    }

//    public void buscarTodasFolhas(List<Livro> livros, List<Folha> fls) {
//
//        for (Livro l : livros) {
//            fls = livroServico.findFolhas(l,this.folha);
//            l.setFolhas(fls);
//        }
//
//    }
    public Livro getLivro() {
        return livro;
    }

    public void setLivro(Livro livro) {
        this.livro = livro;
    }

    public Folha getFolha() {
        return folha;
    }

    public void setFolha(Folha folha) {
        this.folha = folha;
    }

    public List<Livro> getLstLivros() {
        return lstLivros;
    }

    public void setLstLivros(List<Livro> lstLivros) {
        this.lstLivros = lstLivros;
    }

    public List<Folha> getLstFolhas() {
        return lstFolhas;
    }

    public void setLstFolhas(List<Folha> lstFolhas) {
        this.lstFolhas = lstFolhas;
    }

    public Livro getLivroIntervalo() {
        return livroIntervalo;
    }

    public void setLivroIntervalo(Livro livroIntervalo) {
        this.livroIntervalo = livroIntervalo;
    }

    public List<Livro> getLstLivroIntervalo() {
        return lstLivroIntervalo;
    }

    public void setLstLivroIntervalo(List<Livro> lstLivroIntervalo) {
        this.lstLivroIntervalo = lstLivroIntervalo;
    }

    public Integer getNum1() {
        return num1;
    }

    public void setNum1(Integer num1) {
        this.num1 = num1;
    }

    public Integer getNum2() {
        return num2;
    }

    public void setNum2(Integer num2) {
        this.num2 = num2;
    }

    public Folha getFolhaIntervalo() {
        return folhaIntervalo;
    }

    public void setFolhaIntervalo(Folha folhaIntervalo) {
        this.folhaIntervalo = folhaIntervalo;
    }

    public List<Folha> getFolhas() {
        return folhas;
    }

    public void setFolhas(List<Folha> folhas) {
        this.folhas = folhas;
    }

    public Integer getPag() {
        return pag;
    }

    public void setPag(Integer pag) {
        this.pag = pag;
    }
}
